package cn.mujiankeji.mbrowser.界面.标签页.视频播放页面

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.FilterChip
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import cn.mujiankeji.mbrowser.功能.播放框.播放框视图实现
import cn.mujiankeji.mbrowser.功能.播放框.模型.播放文件信息
import cn.mujiankeji.mbrowser.工具.mlog
import cn.mujiankeji.mbrowser.数据.配置项.应用配置
import cn.mujiankeji.mbrowser.界面.图标.MyIconPack
import cn.mujiankeji.mbrowser.界面.图标.myiconpack.信息
import cn.mujiankeji.mbrowser.界面.标签页.统一标签页布局

import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import 界面.弹窗.下拉菜单
import 界面.弹窗.下拉菜单项目


@Composable
fun <T> 视频播放页面实现(state : 视频播放页面状态<T>){
    state.coroutine = rememberCoroutineScope()
    DisposableEffect(Unit) {
        onDispose {
            state.coroutine?.cancel()
            state.coroutine = null
        }
    }



    统一标签页布局({state.标题.value?:"播放"}){

        LazyColumn(Modifier.fillMaxSize()
            .background(MaterialTheme.colorScheme.background)) {

            // 播放框
            item {
                Box(Modifier.fillMaxWidth()
                    .background(Color.Black)
                    .height(230.dp),){
                    if (state.显示播放框){
                        播放框视图实现(state.播放框)
                    }
                }
            }

            // 视频信息
            item {
                视频信息操作视图(state)
            }

            // 视频来源
            item {
                视频来源视图(state)
            }

        }

    }
}

@Composable
private fun <T> 视频信息操作视图(state: 视频播放页面状态<T>){
    var 后台播放 by remember { mutableStateOf(false) }
    var 视频倍速 by remember { mutableStateOf(1f) }
    var 显示视频信息 by remember { mutableStateOf(false) } // 应当信息框显示媒体的基本信息
    var 播放文件信息 by remember { mutableStateOf<播放文件信息?>(null) }


    // 后台播放
    LaunchedEffect(Unit) {
        应用配置.读取视频后台播放().collect{
            后台播放 = it
        }
    }

    // 配速
    LaunchedEffect(Unit) {
        应用配置.读取视频默认倍速().collect{
            视频倍速 = it
        }
    }

    // 播放文件改变
    LaunchedEffect(state.播放框.player?.视频信息) {
        state.播放框?.player?.视频信息?.collect{
            播放文件信息 = it
        }

    }

    Card(colors = CardDefaults
        .elevatedCardColors()
        .copy(containerColor = MaterialTheme.colorScheme.surface),
        modifier = Modifier.padding(horizontal = 10.dp, vertical = 5.dp)
    ) {
        Column(Modifier.fillMaxWidth()
            .padding(horizontal = 15.dp, vertical = 10.dp))
        {

            // 后台  倍速  信息
            Row(Modifier.fillMaxWidth().height(55.dp),
                verticalAlignment = Alignment.CenterVertically){

                Text("选项", style = MaterialTheme.typography.titleMedium)


                Spacer(Modifier.weight(1f))

                FilterChip(selected = 后台播放,{
                    state.coroutine?.launch {
                        应用配置.设置视频后台播放(!后台播放)
                    }
                }, label = {
                    Text("后台")
                })

                Spacer(Modifier.width(6.dp))


                var 显示倍速菜单 by remember { mutableStateOf(false) }
                FilterChip(selected = false,{
                    显示倍速菜单 =true
                }, label = {
                    Text("倍速:${视频倍速}")
                    下拉菜单(显示倍速菜单,{显示倍速菜单 = false}){
                        listOf(0.5f,1.0f,1.25f,1.5f,2f,2.5f,3.0f,4.0f).forEach {
                            下拉菜单项目(it.toString()){
                                state.coroutine?.launch {
                                    应用配置.设置视频默认倍速(it)
                                    state.播放框.player.设置播放速率(it)
                                    显示倍速菜单 = false
                                }
                            }
                        }
                    }
                })

                Spacer(Modifier.width(6.dp))

                IconButton({
                    显示视频信息 = true
                }) {
                    Icon(MyIconPack.信息,"",
                        tint = MaterialTheme.colorScheme.surfaceTint)
                }



            }

            Spacer(Modifier.height(10.dp))

            // 视频源列表
            /*LazyRow {
                items(播放源.播放源列表){
                    FilterChip(it == state.播放中的视频地址,
                        onClick = {state.切换播放源地址(it)},
                        label = { Text(it) })
                }
            }
            */
            Spacer(Modifier.height(10.dp))


            // 当前播放的视频地址
            Text(播放文件信息?.地址?:"", color = MaterialTheme.colorScheme.primary)


            Spacer(Modifier.height(10.dp))




        }

    }



}

@Composable
private fun <T> 视频来源视图(state: 视频播放页面状态<T>){

    val 播放源 = state.播放框.播放源
    // 本地显示的播放源
    var 选中的播放源分类名称 by remember { mutableStateOf<String?>(null) }
    val 当前播放项目 = state.播放框.当前播放项目
    LaunchedEffect(播放源.播放源列表) {
        if (选中的播放源分类名称.isNullOrEmpty()){
            if (播放源.播放源列表.entries.size >= 1) {
                选中的播放源分类名称 = 播放源.播放源列表.entries.first().key
            }
        }
    }

    Card(colors = CardDefaults
        .elevatedCardColors()
        .copy(containerColor = MaterialTheme.colorScheme.surface),
        modifier = Modifier.padding(horizontal = 10.dp, vertical = 5.dp)
        ){
        Column(Modifier.padding(horizontal = 10.dp, vertical = 10.dp)) {

            LazyRow(Modifier.fillMaxWidth()
                .height(55.dp),
                verticalAlignment = Alignment.CenterVertically)
            {
                items(播放源.播放源列表.toList()){
                    FilterChip(selected = it.first == 选中的播放源分类名称,
                        onClick = {
                            选中的播放源分类名称 = it.first
                        },
                        label = { Text(it.first) },
                        modifier = Modifier.padding(horizontal = 5.dp))
                }
            }

            Spacer(Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.outlineVariant)
                .height(.5.dp))
            Spacer(Modifier.height(10.dp))

            FlowRow(Modifier.fillMaxWidth()) {
                选中的播放源分类名称?.let { name->
                    播放源.取列表(name)?.forEach {
                        FilterChip(
                            selected = it == 当前播放项目,
                            onClick = {
                                state.coroutine?.launch {
                                    state.播放框.设置播放项目(选中的播放源分类名称!!,it)
                                }
                            },
                            label = { Text(播放源.取标题(it), style = MaterialTheme.typography.bodyMedium,
                                maxLines = 1) },
                            modifier = Modifier.padding(horizontal = 5.dp)
                        )
                    }
                }
            }


        }
    }
}